<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>C++ Tutorial: Pointers I</title>
  <meta
 content="C++ Tutorial: Pointers"
 name="description" />
  <meta
 content="C++ Tutorial, Pointers, Constant Pointers, Pointer to a Constant, Address of Operator, Dereference"
 name="keywords" />
  <meta http-equiv="Content-Type"
 content="text/html; charset=ISO-8859-1" />
  <link type="text/css" rel="stylesheet" href="../images/bogostyleWidePre.css" />
</head>
<body>
<div id="page" align="center">
<div id="content" style="width: 800px;">
<div id="logo">
<div class="whitetitle" style="margin-top: 70px;">bogotobogo </div>
</div>
<div id="topheader">
<div class="headerbodytext" align="left"><br />
<strong>Bogotobogo</strong><br />
contact@bogotobogo.com </div>
<div class="smallgraytext" id="toplinks"><a href="../index.html">Home</a>
| <a href="../sitemap.html">Sitemap</a>
| <a href="../blog" target="_blank">Contact Us</a>
</div>
</div>
<div id="menu">
<div class="smallwhitetext" style="padding: 9px;" align="right"><a
 href="../index.html">Home</a>
| <a href="../about_us.html">About Us</a>
| <a href="../products.html">Products</a>
| <a href="../our_services.html">Our Services</a>
| <a href="../blog" target="_blank">Contact Us</a>
</div>
</div>
<div id="submenu">
<div class="smallgraytext" style="padding: 9px;" align="right">
<a href="../gif.html">Gif</a> 
|<a href="../java_applet.html">JavaApplet/Web Start</a>
| <a href="../flash.html">Flash</a>
| <a href="../shockwave.html">ShockWave</a>
| <a href="../svg.html">SVG</a>
| <a href="../iPhone.html">iPhone/iPad</a>
| <a href="../android.html">Android</a>
| <a href="../OnHTML5.html">HTML5</a>
| <a href="../Algorithms/algorithms.html">Algorithms</a>
| <a href="../News/NewsMain.html">News</a>
| <a href="../cplusplus/cpptut.html">C++</a>
| <a href="../Java/tutorial/on_java.html">Java</a>
| <a href="../php/phptut.html">PHP</a>
| <a href="../DesignPatterns/introduction.html">Design Patterns</a>
| <a href="../python/pytut.html">Python</a> 
| <a href="../CSharp/.netframework.html">C#</a>
| <a href="../forums.html">Forums</a> 
| <a href="../VisualBasicSQL/introduction.html">Visual Basic</a>
</div>
</div>

<div id="contenttext">
<br />
<!-- Use of this code assumes agreement with the Google Custom Search Terms of Service. -->
<!-- The terms of service are available at http://www.google.com/cse/docs/tos.html -->
<form name="cse" id="searchbox_demo" action="http://www.google.com/cse">
  <input type="hidden" name="cref" value="" />
  <input type="hidden" name="ie" value="utf-8" />
  <input type="hidden" name="hl" value="" />
  <input name="q" type="text" size="40" />
  <input type="submit" name="sa" value="Search" />
</form>
<script type="text/javascript" src="http://www.google.com/cse/tools/onthefly?form=searchbox_demo&lang="></script>


<br />
<div style="padding: 10px;"><span class="titletext">C++ Tutorial -   Pointers I</span></div>

<div id="bookmarkshare">
<script type="text/javascript">var addthis_config = {"data_track_clickback":true};</script>
<a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;username=khhong7"><img src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a><script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#username=khhong7"></script>
</div>


<img src="../images/cplusplus/cpp_logo.jpg" alt="cplusplus logo"/>

<div class="bodytext" style="padding: 12px;" align="justify"> 
<div class="subtitle_2nd" id="FullList">Full List of C++ Tutorials</div>
<ul>
   <li><a href="cpptut.html">C++ Home</a> </li>
   <li><a href="string.html">String</a> </li>
   <li><a href="constructor.html">Constructor</a> </li>
   <li><a href="operatoroverloading.html">Operator Overloading</a> </li>
   <li><a href="virtualfunctions.html">Virtual Functions</a></li>
   <li><a href="dynamic_cast.html">Dynamic Cast Operator</a></li>
   <li><a href="typecast.html">Type Cast Operators</a></li>
   <li><a href="autoptr.html">Class auto_ptr</a></li>
   <li><a href="templates.html">Templates</a></li>
   <li><a href="references.html">References for Built-in Types</a></li>
   <li><a href="valuevsreference.html">Pass by Value vs. Pass by Reference</a></li>
   <li><a href="memoryallocation.html">Memory Allocation</a></li>
   <li><a href="friendclass.html">Friend Functions and Friend Classes</a></li>
   <li><a href="functors.html">Functors (Function Objects)</a></li>
   <li><a href="statics.html">Static Variables and Static Class Members</a></li>
   <li><a href="exceptions.html">Exceptions</a></li>
   <li><a href="pointers.html">Pointers</a></li>
   <li><a href="pointers2.html">Pointers II</a></li>
   <li><a href="pointers3.html">Pointers III</a></li>
   <li><a href="assembly.html">Taste of Assembly</a></li>
   <li><a href="smallprograms.html">Small Programs</a></li>
   <li><a href="linkedlist.html">Linked List Examples</a></li>
   <li><a href="binarytree.html">Binary Tree Example Code</a></li>
   <li><a href="stl.html">Standard Template Library (STL)</a></li>
   <li><a href="stl2.html">Standard Template Library (STL) II - Maps</a></li>
   <li><a href="stl3_iterators.html">Standard Template Library (STL) III - Iterators</a></li>
   <li><a href="slicing.html">Object Slicing and Virtual Table</a></li>
   <li><a href="this_pointer.html">The this Pointer</a></li>
   <li><a href="stackunwinding.html">Stack Unwinding</a></li>
   <li><a href="upcasting_downcasting.html">Upcasting and Downcasting</a></li>
   <li><a href="object_returning.html">Object Returning</a></li>
   <li><a href="private_inheritance.html">Private Inheritance</a></li>
   <li><a href="cplusplus_keywords.html">C++_Keywords</a></li>
   <li><a href="multithreaded.html">Multi-Threaded Programming - Terminology</a></li>
   <li><a href="multithreaded2A.html">Multi-Threaded Programming II - Native Thread for Win32 (A) </a></li>
   <li><a href="multithreaded2B.html">Multi-Threaded Programming II -  Native Thread for Win32 (B) </a></li>
   <li><a href="multithreaded2C.html">Multi-Threaded Programming II -  Native Thread for Win32 (C) </a></li>
   <li><a href="multithreaded2.html">Multi-Threaded Programming II - C++ Thread for Win32</a></li>
   <li><a href="multithreaded3.html">Multi-Threaded Programming III - C++ Class Thread for Pthreads</a></li>
   <li><a href="multithreadedDebugging.html">Multithread Debugging</a></li>
   <li><a href="embeddedSystemsProgramming.html">Embedded Systems Programming</a></li>
   <li><a href="boost.html">Boost</a></li>
   <li>Programming Questions and Solutions
    <ul>
       <li><a href="quiz_strings_arrays.html">Strings and Arrays</a></li>
       <li><a href="quiz_linkedlist.html">Linked List</a></li>
       <li><a href="quiz_recursion.html">Recursion</a></li>
       <li><a href="quiz_bit_manipulation.html">Bit Manipulation</a> </li>
       <li><a href="google_interview_questions.html">140 Google Interview Questions</a> </li>
    </ul>
   </li>
</ul>
</div>


<br />
<div class="bodytext" style="padding: 12px;" align="justify">
<div class="subtitle" id="pointersexample">Pointers by Example</div>
<p>In this section, we'll dive into the example demonstrating the characteristics of pointers rather than describe what the pointer is and how we manipulate it. We'll look at the details of pointer in later sections.</p>
<p>Let's define a structure:</p>
<pre>
struct account
{
	char* name;
	char id[8];
	int balance;
}
</pre>
<p>So, when we make a struct account object:</p>
<pre>
account Customer[4];
</pre>
<p>we are allocating memory for 4 Customer objects:</p>
<img src="images/pointers1/memalloc_4.png" alt="memalloc_4"/>
<p>Let's assign some values to the members.</p>
<pre>
Customer[0].balance = 1500;
Customer[2].name = strdup("Sam");
</pre>
<p><strong>strdup("Sam")</strong> does dynamic memory allocation for the character array including the end character <strong>'\0'</strong> and returns the address of the heap memory.</p>
<img src="images/pointers1/strdup.png" alt="strdup"/>
<p>What's the memory diagram looks like if we do the following?</p>
<pre>
Customer[3].name = Customer[0].id + 7;
</pre>
<p>When the compiler sees :</p>
<pre>
Customer[0].id + 7;
</pre>
<p>the number <strong>7</strong> really represents the <strong>hop</strong> count. The unit of the <strong>hop</strong> comes from the <strong>Customer[0].id</strong> which is the pointer to an array of character. So, <strong>hop</strong> here, becomes <strong>one byte</strong>. 7-byte offset from the base address is marked as blue in the picture and the <strong>Customer[3].name</strong> gets the address at <strong>Customer[0].id + 7</strong>.</p>
<img src="images/pointers1/id7.png" alt="id7"/>
<p>Let's assign <strong>id</strong> for <strong>Customer[1]</strong> using <strong>strcpy()</strong>:</p>
<pre>
strcpy(Customer[1].id, "1234567");
</pre>
<img src="images/pointers1/strcpy.png" alt="strcpy"/>
<p>The <strong>strcpy()</strong> is copying characters one by one onto the allocated stack memory space.</p>
<p>How about the following line:</p>
<pre>
strcpy(Customer[3].name, "abcd");
</pre>
<p>The <strong>Customer[3].name</strong> is pointing to the <strong>Customer[0].id + 7</strong> and we are assigning a constant character to that address. The memory diagram looks like this:</p>
<img src="images/pointers1/id7B.png" alt="id7B"/>
<p>As we see in the picture, we put a character by character into the memory starting from <strong>Customer[0].id + 7</strong> to 5-byte after that even overwriting an area which was  previously allocated for 4-byte integer.</p>
<p>Things can get messy if we are doing what we're not supposed to do. Here, we are assigning a character to a location not allocated for us. No problem assigning it but if we have additional local variables, it will overwrite them and anything can happen later if we do this:</p>
<pre>
Customer[7].id[11] = 'A';
</pre>
<img src="images/pointers1/customer7.png" alt="customer7"/>
<p>The compiler doesn't care, it just follows the rule of how we walk through the memory. So, it goes to the <strong>Customer[7].id[0]</strong> and move to <strong>11-chararcter</strong> offset and assigns <strong>'A'</strong> to that location. That's it.</p>
<br />
<br />

<div class="subtitle" id="pointers">Pointers</div>
<p>A pointer is a <strong>variable</strong> that can contain a memory <strong>address</strong>. Pointers give us the ability to work directly and efficiently with memory. </p>
<p>Here is the description of pointer from <a href="http://en.wikipedia.org/wiki/Pointer_(computing)" target="_blank">wiki</a>:<p>
<p>In computer science, a <strong>pointer</strong> is a programming language data type whose value refers directly to (or "<strong>points</strong> to") another value stored elsewhere in the computer memory using its address. For high-level programming languages, pointers effectively take the place of general purpose registers in low-level languages such as assembly language or machine code, but may be in available memory. </p>
<p>A pointer <strong>references</strong> a location in memory, and obtaining the value at the location a pointer refers to is known as <strong>dereferencing</strong> the pointer. A pointer is a simple, less abstracted implementation of the more abstracted reference data type (although it is not as directly usable as a C++ reference). Several languages support some type of pointer, although some are more restricted than others.</p>
<p>
Pointers to data significantly improve performance for repetitive operations such as traversing strings, lookup tables, control tables and tree structures. In particular, it is often much cheaper in time and space to copy and dereferences pointers than it is to copy and access the data to which the pointers point.</p>
<p>
Pointers are also used to hold the addresses of entry points for called subroutines in procedural programming and for run-time linking to dynamic link libraries (DLLs). In Object-oriented programming, pointers to functions are used for binding methods, often using what are called virtual method tables.</p>
<br />
<br />


<div class="subtitle" id="declaration">Pointer Declaration</div>
<p>To declare a pointer, we use '*' as:
<pre>
int *ptr;
</pre>
<p>A pointer is declared to point to a specific type of a value. The <strong>ptr</strong> is a pointer to <strong>int</strong>. This means that it can only point to an <strong>int</strong> value. It can't point to a <strong>float</strong> or a <strong>char</strong>. In other words, the pointer <strong>ptr</strong> can only store the address of an <strong>int</strong>.</p>
<p>When we declare a pointer, we can put whitespace on either side of the *. So, following three lines are the same.</p>
<pre>
int *ptr;
int* ptr;
int * ptr;
</pre>
 
<br />
<br />


<div class="subtitle" id="initialization">Pointer Initialization</div>
<pre>
int *ptr = 0;
</pre>
<p>Here, assigning <strong>0</strong> to a pointer has special meaning. It makes the pointer point to nothing. It's like a remote controller with no programming in it. So, with that remote controller we can't do anything. When we are talking about a pointer, the <strong>0</strong> is called a <strong>null pointer</strong>.</p>

<br />
<br />


<div class="subtitle" id="addressof">&, Address of Operator</div>
<pre>
int *ptr = 0;
</pre>
<p>The main job of pointer is to store address of an object. So, we need a way to put address into the pointer. One way of doing it is to retrieve the memory address of an existing object and assign it to a pointer. </p>
<pre>
#include &lt;iostream&gt;
using namespace std;

int main () {
	int myScore = 92;
	int *ptr;
	<font color="blue">ptr = &myScore;</font>

	cout << "&myScore = " << &myScore << endl;
	cout << "ptr = " << ptr << endl;
  return 0;
}
</pre>
with an output:
<pre>
&myScore = 0017FF28
ptr = 0017FF28
</pre>
<p>Using the <strong>&</strong>, the <strong>address of</strong> operator, we assign the address of a variable to a pointer.
<pre>
ptr = &myScore;
</pre>	

<br />
<br />


<div class="subtitle" id="dereferencing">Dereferencing a Pointer</div>
<p>We <strong>dereference</strong> a pointer by using <strong>*</strong>, the <strong>deference</strong> operator.
<pre>
cout << "myScore = " << *ptr << endl;
</pre>
<br />
<br />


<div class="subtitle" id="reassign">Reassigning a Pointer</div>
<p>Contrary to a reference which we can't reassign it to a different object, a pointer can point to a different object during of its life.
Let's do a fact check with a code.
<pre>
#include &lt;iostream&gt;
using namespace std;

int main () {
	int myScore = 92;
	int *ptr;
	ptr = &myScore;
	cout << "&myScore = " << &myScore << endl;
	cout << "ptr = " << ptr << endl;
	cout << "myScore = " << *ptr << endl;
	cout << endl;
	int myNewScore = 97;
	<font color="blue">ptr = &myNewScore;</font>
	cout << "&myNewScore = " << &myNewScore << endl;
	cout << "ptr = " << ptr << endl;
	cout << "myNewScore = " << *ptr << endl;
  return 0;
}
</pre>
with an output:
<pre>
&myScore = 0017FF28
ptr = 0017FF28
myScore = 92

&myNewScore = 0017FF10
ptr = 0017FF10
myNewScore = 97
</pre>
</p>
<br />
<br />


<div class="subtitle" id="pointertoobject">Pointers to Objects</div>
<p>Until now, we've been using a pointer to store the address of a build-in type <strong>int</strong>. We can use pointers with objects in the same way. Here is a simple example:</p>
<pre>
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main () {
	string str = "Bad artists copy. Good artists steal.";
	string *pStr = &str;
	cout << "*pStr: " << *pStr << endl;
	cout << "(*pStr).size() is " << (*pStr).size() << endl;
	cout << "pStr->size() is " << pStr->size() << endl;
  	return 0;
}
</pre>
with an output:
<pre>
*pStr: Bad artists copy. Good artists steal.
(*pStr).size() is 37
pStr->size() is 37
</pre>
<p>I created a string object, <strong>str</strong>, and a pointer which points to that string object, <strong>pStr</strong>. <strong>pStr</strong> is a pointer to <srong>string</strong>, meaning that it can point to any <strong>string</strong> object.</p>
<pre>
string str = "Bad artists copy. Good artists steal.";
string *pStr = &str;
</pre>
<p>
 We can access an object through a pointer using dereference operator, *.</strong></p>
<pre>
cout << "*pStr: " << *pStr << endl;
</pre>
<p>By using the dereference operator, I send the object, <strong>str</strong>, to which <strong>pStr</strong> points, to <strong>cout</strong>.</p>
<p>We can call the member functions of an object through a pointer.</p>
<pre>
cout << "(*pStr).size() is " << (*pStr).size() << endl;
</pre>
<p><strong>(*pStr).size()</strong> says "Take the dereferencing result of <strong>pStr</strong> and call the object's member function, <strong>size()</strong> ."</p>
<p>Or we can use -&gt; operator with pointer to access the members of objects:</p>
<pre>
cout << "pStr-&gt;size() is " << pStr-&gt;size() << endl;
</pre>
<br />
<br />


<div class="subtitle" id="pointerandconstants">Pointers and Constants</div>
<p>We can use the keyword <strong>const</strong> to put some constraints on the way pointers are working. The <strong>const</strong> key word can act as safeguards and can make coder's intention more clear. </p>
<br />
<div class="subtitle_2nd" id="constantpointer">Constant Pointer</div>
<p>A regular pointer can point to different objects during its life cycle. But we can restrict the pointer so it can point only to the object at the time of its initialization by using a <strong>const pointer</strong>.</p>
<pre>
int myScore = 83;
int* const cpScore = &myScore;   // a constant pointer
</pre>
<p>This creates a constant pointer, <strong>pcScore</strong>. Like all constants, we must initialize a constant pointer at the time when we first declare it. So, the following line is an error.</p>
<pre>
int* const cpScore;  	// illegal: initialization is missing
</pre>
<p>Since <strong>cpScore</strong> is a constant pointer, it can't point to any object other than the original object. So, the following line is also an error.</p>
<pre>
pcScore = &newScore;	// illegal: pcScore can't point to another object
</pre>
<p>However, we can change the value of the object to which our <strong>cpScore</strong> is pointing to. So, this is legal.</p>
<pre>
*pcScore = 91;	// OK. change the value from 83 to 91
</pre>
<p>In a sense, a <strong>constant pointer</strong> is similar to <strong>reference</strong> since like a reference, a pointer can refer only to the object it was initialized to refer to.</p>

<br />
<div class="subtitle_2nd" id="pointertoconstant">Pointer to a Constant</div>
<p>We were able to change the values to which pointers point. But once again by using the <strong>const</strong> key word, we can restrict a pointer so it can't be used to change the value to which it points to. A pointer like this is called a <strong>pointer to a constant</strong>.
<pre>
int finalScore = 89;
const int* pcFinalScore;	// a pointer to a constant
pcFinalScore = &finalScore;
</pre>
It's declaring a pointer to a constant <strong>pcFinalScore</strong>.
If somebody is not satisfied with the score and try to change like this:
<pre>
*pcFinalScore = 99;
</pre>
He will get an error message from the compiler, something like this:
<pre>
 'pcFinalScore' : you cannot assign to a variable that is const
</pre>
However, the pointer itself can point to other score of somebody else's.
<pre>
int scoreOfSomebody = 95;
pcFinalScore = &scoreOfSomebody;
</pre>
</p>
<p>Here is the complete code:</p>
<pre>
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main () {
	int finalScore = 89;
	const int* pcFinalScore;	// a pointer to a constant
	pcFinalScore = &finalScore;
	cout << "*pcFinalScore = " << *pcFinalScore << endl;
	//*pcFinalScore = 99;		// illegal
	int scoreOfSomebody = 95;
	pcFinalScore = &scoreOfSomebody;
	cout << "*pcFinalScore = " << *pcFinalScore << endl;
	return 0;
}
</pre>
<p>Output is:</p>
<pre>
*pcFinalScore = 89
*pcFinalScore = 95
</pre>
<br />
<div class="subtitle_2nd" id="constantpointertoconstant">Constant Pointer to a Constant</div>
<p>A <strong>constant pointer to a constant</strong> can only point to the object that it was initialized to point to. This pointer can't be used to change the value of the object to which is points. </p>
<pre>
int finalScore = 89;
const int* const cpcReallyFinal = &finalScore ;
*cpcReallyFinal = 99; 		// illegal - can't change value through pointer
cpcReallyFinal = &anotherScore	// illegal - cpcReallyFinal can't point to another object
</pre>


<div id="rightpanel">
<div align="center">
</div></div>

<br /><br />
<br /><br />
<div class="subtitle_2nd" id="FullList">Full List of C++ Tutorials</div>
<ul>
   <li><a href="cpptut.html">C++ Home</a> </li>
   <li><a href="string.html">String</a> </li>
   <li><a href="constructor.html">Constructor</a> </li>
   <li><a href="operatoroverloading.html">Operator Overloading</a> </li>
   <li><a href="virtualfunctions.html">Virtual Functions</a></li>
   <li><a href="dynamic_cast.html">Dynamic Cast Operator</a></li>
   <li><a href="typecast.html">Type Cast Operators</a></li>
   <li><a href="autoptr.html">Class auto_ptr</a></li>
   <li><a href="templates.html">Templates</a></li>
   <li><a href="references.html">References for Built-in Types</a></li>
   <li><a href="valuevsreference.html">Pass by Value vs. Pass by Reference</a></li>
   <li><a href="memoryallocation.html">Memory Allocation</a></li>
   <li><a href="friendclass.html">Friend Functions and Friend Classes</a></li>
   <li><a href="functors.html">Functors</a></li>
   <li><a href="statics.html">Static Variables and Static Class Members</a></li>
   <li><a href="exceptions.html">Exceptions</a></li>
   <li><a href="pointers.html">Pointers</a></li>
   <li><a href="pointers2.html">Pointers II</a></li>
   <li><a href="pointers3.html">Pointers III</a></li>
   <li><a href="assembly.html">Taste of Assembly</a></li>
   <li><a href="smallprograms.html">Small Programs</a></li>
   <li><a href="linkedlist.html">Linked List Examples</a></li>
   <li><a href="binarytree.html">Binary Tree Example Code</a></li>
   <li><a href="stl.html">Standard Template Library (STL)</a></li>
   <li><a href="stl2.html">Standard Template Library (STL) II - Maps</a></li>
   <li><a href="stl3_iterators.html">Standard Template Library (STL) III - Iterators</a></li>
   <li><a href="slicing.html">Object Slicing and Virtual Table</a></li>
   <li><a href="this_pointer.html">The this Pointer</a></li>
   <li><a href="stackunwinding.html">Stack Unwinding</a></li>
   <li><a href="upcasting_downcasting.html">Upcasting and Downcasting</a></li>
   <li><a href="object_returning.html">Object Returning</a></li>
   <li><a href="private_inheritance.html">Private Inheritance</a></li>
   <li><a href="cplusplus_keywords.html">C++_Keywords</a></li>
   <li><a href="multithreaded.html">Multi-Threaded Programming - Terminology</a></li>
   <li><a href="multithreaded2A.html">Multi-Threaded Programming II - Native Thread for Win32 (A) </a></li>
   <li><a href="multithreaded2B.html">Multi-Threaded Programming II -  Native Thread for Win32 (B) </a></li>
   <li><a href="multithreaded2C.html">Multi-Threaded Programming II -  Native Thread for Win32 (C) </a></li>
   <li><a href="multithreaded2.html">Multi-Threaded Programming II - C++ Thread for Win32</a></li>
   <li><a href="multithreaded3.html">Multi-Threaded Programming III - C++ Class Thread for Pthreads</a></li>
   <li><a href="multithreadedDebugging.html">Multithread Debugging</a></li>
   <li><a href="embeddedSystemsProgramming.html">Embedded Systems Programming</a></li>
   <li><a href="boost.html">Boost</a></li>
   <li>Programming Questions and Solutions
    <ul>
       <li><a href="quiz_strings_arrays.html">Strings and Arrays</a></li>
       <li><a href="quiz_linkedlist.html">Linked List</a></li>
       <li><a href="quiz_recursion.html">Recursion</a></li>
       <li><a href="quiz_bit_manipulation.html">Bit Manipulation</a> </li>
       <li><a href="google_interview_questions.html">140 Google Interview Questions</a> </li>
    </ul>
   </li>
</ul>
<br /><br />


<br />


<br />
<br />
<br />


</div>
</div>
<div class="smallgraytext" id="footer"><a href="../index.html">Home</a>
| <a href="../about_us.html">About Us</a>
| <a href="../products.html">products</a>
| <a href="../our_services.html">Our Services</a>
| <a href="#">Contact Us</a>
| Bogotobogo &copy; 2011 | <a target="_blank" href="http://www.bogotobogo.com">Bogotobogo </a>
</div>
</div>
</div>
</body>
</html>
